#include <cuda_runtime.h>
#include <stdio.h>

int main() {
    int deviceId;
    cudaGetDevice(&deviceId);  // 获取当前使用的GPU设备ID

    // 1. 查询 SM级最大线程数（单个block的线程数上限）
    int maxThreadsPerBlock;
    cudaDeviceGetAttribute(&maxThreadsPerBlock, cudaDevAttrMaxThreadsPerBlock, deviceId);

    // 2. 查询 SM数量
    int multiProcessorCount;
    cudaDeviceGetAttribute(&multiProcessorCount, cudaDevAttrMultiProcessorCount, deviceId);

    // 3. 计算设备级最大总线程数（理论值）
    int maxTotalThreads = multiProcessorCount * maxThreadsPerBlock;

    // 输出结果
    printf("GPU 设备ID: %d\n", deviceId);
    printf("SM级最大线程(单block上限)%d\n", maxThreadsPerBlock);
    printf("SM数量: %d\n", multiProcessorCount);
    printf("设备级最大总线程数（理论）：%d\n", maxTotalThreads);

    return 0;
}

/* RTX3060显卡:
GPU 设备ID: 0
SM级最大线程(单block上限)1024
SM数量: 28
设备级最大总线程数（理论）：28672
*/

/* Jetson Orin运行:
GPU 设备ID：0
SM级最大线程数（单block上限）：1024
SM数量：16
设备级最大总线程数（理论）：16384
*/